﻿using System;
using System.ComponentModel;
using System.Reflection;

namespace GDM.Hogar.Soporte.Helpers
{
    public static class EnumUtils
    {
        public static T EnumParse<T>(this string valor)
        {
            return EnumParse<T>(valor, false);
        }

        public static T EnumParse<T>(this string valor, bool ignorarMayusculas)
        {
            if (valor == null)
            {
                throw new ArgumentNullException("valor");
            }

            valor = valor.Trim();
            if (valor.Length == 0)
            {
                throw new ArgumentException("Debe especificar informacion valida para parsear un string", "valor");
            }

            var t = typeof(T);
            if (!t.IsEnum)
            {
                throw new ArgumentException("El tipo debe ser Enum", "T");
            }

            var enumType = (T)Enum.Parse(t, valor, ignorarMayusculas);
            return enumType;
        }

        public static string GetEnumDescription(this Enum e)
        {
            FieldInfo fieldInfo = e.GetType().GetField(e.ToString());

            var enumAttributes =
                (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);

            if (enumAttributes.Length > 0)
            {
                return enumAttributes[0].Description;
            }

            return e.ToString();
        }
    }
}